package com.ffr.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import com.ffr.domain.FFRBaseEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.Objects;

import static com.ffr.common.utils.SecurityUtils.getLoginUser;


/**
 * @author hkn
 * @description: 自动注入填充
 * @date 2024/05/16 14:36:26
 */
@Component
public class FFRBaseEntityConfig implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {

        if (Objects.nonNull(metaObject) && metaObject.getOriginalObject() instanceof FFRBaseEntity) {
            FFRBaseEntity baseEntity = (FFRBaseEntity) metaObject.getOriginalObject();
            LocalDateTime now = LocalDateTime.now();
            Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());


            // 创建时间为空，则以当前时间为插入时间
            if (Objects.isNull(baseEntity.getCreateTime())) {
                baseEntity.setCreateTime(date);
            }
            // 更新时间为空，则以当前时间为更新时间
            if (Objects.isNull(baseEntity.getUpdateTime())) {
                baseEntity.setUpdateTime(date);
            }
            // 此处写获取用户及用户名的业务代码
            String user;
            try {
                user = getLoginUser().getUser().getNickName();
            } catch (Exception e) {
                return ;
            }
            // 当前登录用户不为空，创建人为空，则当前登录用户为创建人
            if (Objects.nonNull(user) && Objects.isNull(baseEntity.getCreateBy())) {
                baseEntity.setCreateBy(user);
            }
            // 当前登录用户不为空，更新人为空，则当前登录用户为更新人
            if (Objects.nonNull(user) && Objects.isNull(baseEntity.getUpdateUser())) {
                baseEntity.setUpdateUser(user);
            }
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        FFRBaseEntity baseEntity = (FFRBaseEntity) metaObject.getOriginalObject();
        LocalDateTime now = LocalDateTime.now();
        Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant());

        baseEntity.setUpdateTime(date);
        // 此处写获取用户及用户名的业务代码
        String user;
        try {
            user = getLoginUser().getUser().getNickName();
        } catch (Exception e) {
            return ;
        }
        if (StringUtils.isNotBlank(user)) {

            baseEntity.setUpdateUser(user);
        }
    }
}
